/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import br.com.redesocial.business.Business;
import br.com.redesocial.entity.Usuario;
import br.com.redesocial.view.View;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Bruno
 */
@WebServlet(urlPatterns = {"/LonelyPeople"})
public class LonelyPeople extends HttpServlet {
    
    private HttpServletResponse HttpServletResponse;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
           String q = request.getParameter("q");
           
           /* Cadastro usuário, primeiro passo */
           if(q.equalsIgnoreCase("cadastrarusuario")){
               Usuario usu = new Usuario();
               usu.sexo_user = request.getParameter("sexo_user");
               usu.sexo_proc = request.getParameter("sexo_proc");
               usu.nasci_dia = request.getParameter("nasci_dia");
               usu.nasci_mes = request.getParameter("nasci_mes");
               usu.nasci_ano = request.getParameter("nasci_ano");
               usu.apelido = request.getParameter("apelido");
               usu.email = request.getParameter("email");
               usu.senha = request.getParameter("senha");
               
               if(usu.email.equals("") || 
                  usu.senha.equals("") ||
                  usu.apelido.equals("") ||
                  usu.nasci_ano.equals("") ||
                  usu.nasci_mes.equals("") ||
                  usu.nasci_dia.equals("") ||
                  usu.sexo_user.equals("") ||
                  usu.sexo_proc.equals("")
                ){
                   String mensagem_cadastro = "Todos campos são obrigatórios.";
                   request.getRequestDispatcher("index.jsp?mensagem_cadastro="+ URLEncoder.encode(mensagem_cadastro, "ISO-8859-1")).include(request, response);
               }         
               
               View vw = new View();
               int retorno = vw.CadastrarUsuario(usu);
               HttpSession session = request.getSession();
               session.setAttribute("id_usuario", retorno);
               session.setAttribute("usuario_cadastrado", usu.apelido);
               if(retorno>0){
                   response.sendRedirect("continua_cadastro.jsp");
               } else {
                   request.getRequestDispatcher("index.jsp?mensagem_cadastro="+ URLEncoder.encode("Email já existe.", "ISO-8859-1")).include(request, response);
               }
           } 
           
           if(q.equalsIgnoreCase("completacadastrousuario")){
              Business bs = new Business();
              HttpSession session = request.getSession();
              Usuario usu = new Usuario();
              
              usu.nm_completo = bs.corrigeAcento(request.getParameter("nm_completo"));
              usu.estado = bs.corrigeAcento(request.getParameter("estado"));
              usu.cidade = bs.corrigeAcento(request.getParameter("cidade"));
              usu.u_est_civil = request.getParameter("u_est_civil");
              usu.intencao = request.getParameterValues("intencao");
              usu.u_altura =  request.getParameter("u_altura").replace(",", ".");
              usu.u_peso = request.getParameter("u_peso");
              usu.p_est_civil = request.getParameterValues("p_est_civil");
              usu.p_idade_min = request.getParameter("p_idade_min");
              usu.p_idade_max = request.getParameter("p_idade_max");
              usu.p_altura_min = request.getParameter("p_altura_min");
              usu.p_altura_max = request.getParameter("p_altura_max");
              usu.p_peso_min = request.getParameter("p_peso_min");
              usu.p_peso_max = request.getParameter("p_peso_max");
              usu.distancia = request.getParameter("distancia");
              usu.id_usuario = request.getParameter("id_usuario");
              
              View vw = new View();
              vw.CompletaCadastroUsuario(usu);              
              response.sendRedirect("sucesso_cadastro.jsp");
           }
           
           /* Autenticação do usuário */
           if(q.equalsIgnoreCase("autenticarusuario")){
              Usuario usu = new Usuario();
              usu.autentica_email = request.getParameter("email_login");
              usu.autentica_senha = request.getParameter("senha_login");
              
              View vw = new View();
              List retorno = vw.AutenticarUsuario(usu);
              
              if("erro".equals(retorno.get(0))){
                   String mensagem = "Usuário ou senha inválidos.";
                   request.getRequestDispatcher("index.jsp?mensagem="+ URLEncoder.encode(mensagem, "ISO-8859-1")).include(request, response);
               } else {
                    HttpSession session = request.getSession();
                    Business bs = new Business();
                    
                    session.setAttribute("Logado", "1");
                    session.setAttribute("NM_Apelido", retorno.get(0));
                    session.setAttribute("EM_Usuario", retorno.get(1));
                    session.setAttribute("DT_Nascimento", retorno.get(2));
                    session.setAttribute("TP_Sexo_User", retorno.get(3));
                    session.setAttribute("TP_Sexo_Procu", retorno.get(4));
                    session.setAttribute("NM_Avatar", retorno.get(5));
                    session.setAttribute("NM_Completo", retorno.get(6));
                    session.setAttribute("UF_Estado", retorno.get(7));
                    session.setAttribute("NM_Cidade", retorno.get(8));
                    session.setAttribute("ST_Civil", retorno.get(9));
                    session.setAttribute("TP_Intensao", retorno.get(10));
                    session.setAttribute("NR_Altura", retorno.get(11));
                    session.setAttribute("NR_Peso", retorno.get(12));
                    session.setAttribute("PR_Civil", retorno.get(13));
                    session.setAttribute("PR_Altura", retorno.get(14));
                    session.setAttribute("PR_Peso", retorno.get(15));
                    session.setAttribute("PR_Idade", retorno.get(16));
                    session.setAttribute("PR_Distancia", retorno.get(17));
                    session.setAttribute("ID_Usuario", retorno.get(18));                    
                    response.sendRedirect("home.jsp");
               }            
           }
                      
           /* Desloga o usuário do site */
           if(q.equalsIgnoreCase("logout")){
               HttpSession session = request.getSession();
               session.invalidate();
               response.sendRedirect("index.jsp");
           }
           
           /* Envia FEED*/
           if(q.equalsIgnoreCase("envia_feed")){
               Business bs = new Business();
               String conteudo = request.getParameter("conteudo");
               bs.AdicionaFeed(conteudo, request);
           }
           
           /* Envia FEED Video*/
           if(q.equalsIgnoreCase("envia_feed_video")){
               Business bs = new Business();
               
               String conteudo = request.getParameter("video");      
               String video = "//www.youtube.com/embed/"+conteudo;
               conteudo = "<iframe width=\"560\" height=\"315\" src=\""+video+"\" frameborder=\"0\" allowfullscreen></iframe>";
               bs.AdicionaFeed(conteudo, request);
           }
           
           if(q.equalsIgnoreCase("lista_feeds")){
               View vw = new View();
               String retorno = vw.ListaFeeds(request);
               out.print(retorno);
           }
           
           if(q.equalsIgnoreCase("lista_amigos")){
               View vw = new View();
               String retorno = vw.ListaAmigos(request);
               out.print(retorno);
           }
           
           if(q.equalsIgnoreCase("aceitar_amigos")){
               View vw = new View();
               vw.AceitarAmigos(request.getParameter("id_amigo"), request);
           }
           
           if(q.equalsIgnoreCase("busca_amigo")){
               String amigo = (String) request.getParameter("amigo");
               View vw = new View();
               String retorno = vw.BuscaAmigo(amigo, request);
               out.print(retorno);
           }
           
           if(q.equalsIgnoreCase("solicitar_amizade")){
               View vw = new View();
               vw.SolicitarAmizade(request.getParameter("id_amigo"), request);
           }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(LonelyPeople.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(LonelyPeople.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
